#include <iostream>
#include <mysql/mysql.h>

using namespace std;

/**
 * C++ 使用 MySQL 数据库流程（已经安装好 MySQL 数据库）
 * 
 * 1. 添加头文件
 * 2. 引用动态库
 *      1. 如果是使用 CMake，那么在 CMakeLists.txt 中添加 MySQL 头文件和引用库
 *      2. 命令编译程序，手动添加头文件和库
 *          -I/usr/include -L/usr/lib/x86_64-linux-gnu -lmysqlclient
 * 3. 程序连接数据库（看官方文档；网上直接搜索）
*/

void query()
{
    MYSQL *con = mysql_init(NULL);
    // 连接数据库时需要判断是否连接成功，
    mysql_real_connect(con, "127.0.0.1", "li", "123456", "tallyBook", 0, NULL, CLIENT_MULTI_STATEMENTS);
    auto search_res = mysql_query(con, "select * from user;");
    auto result = mysql_store_result(con);
    int col = mysql_num_fields(result);//获取列数
    int row = mysql_num_rows(result);//获取行数

    // if(search_res == 0 && row != 0){
    //     auto info = mysql_fetch_row(result);//获取一行的信息
    //     cout<<"id: "<< info[0] << " name: "<< info[1] << " passwd: "<< info[2] << endl;
    // }
    for(int i = 0; i < row; i++) {
        auto info = mysql_fetch_row(result);//获取一行的信息
        cout<<"id: "<< info[0] << " name: "<< info[1] << " passwd: "<< info[2] << endl;
    }
    mysql_close(con);
}

void insert()
{
    MYSQL *con = mysql_init(NULL);
    // 连接数据库时需要判断是否连接成功，
    mysql_real_connect(con, "127.0.0.1", "li", "123456", "tallyBook", 0, NULL, CLIENT_MULTI_STATEMENTS);
    const char* sql = "insert into user values('4', 'devi', '123456');";
    int ret = mysql_query(con, sql);
    if(ret == 0) {
        cout << "msg = 插入数据成功， sql = "<< sql << endl;
    }
    else {
        cout << "msg = 插入数据失败， sql = "<< sql << endl;
    }

    mysql_close(con);
}

int main()
{
    query();
    // insert();
    
    return 0;
}